package org.arch_learn.io.nio.bytebuffer;

import java.nio.ByteBuffer;

/**
 * 演示向缓冲区中添加数据
 */
public class PutByteBufferDemo {

    public static void main(String[] args) {
        //1.初始化一个长度为10的缓冲区
        ByteBuffer byteBuffer = ByteBuffer.allocate(10);
        //获取当前索引所在位置
        System.out.println(byteBuffer.position());
        //获取当前最多能操作到的索引位置
        System.out.println(byteBuffer.limit());
        //获取缓冲区的总长度
        System.out.println(byteBuffer.capacity());
        //获取缓冲区还能操作的空余位置 remaining = limit - position
        System.out.println(byteBuffer.remaining());

        System.out.println("----------------------------------");

//        //修改当前索引所在位置
//        byteBuffer.position(1);
//        //修改最多能操作到哪个索引的位置
//        byteBuffer.limit(9);
//        //获取当前索引所在位置
//        System.out.println(byteBuffer.position());
//        //获取当前最多能操作到的索引位置
//        System.out.println(byteBuffer.limit());
//        //获取缓冲区的总长度
//        System.out.println(byteBuffer.capacity());
//        //获取缓冲区还能操作的空余位置 remaining = limit - position
//        System.out.println(byteBuffer.remaining());
        //添加一个字节
        byteBuffer.put((byte) 97);
        //获取当前索引所在位置
        System.out.println(byteBuffer.position());
        //获取当前最多能操作到的索引位置
        System.out.println(byteBuffer.limit());
        //获取缓冲区的总长度
        System.out.println(byteBuffer.capacity());
        //获取缓冲区还能操作的空余位置 remaining = limit - position
        System.out.println(byteBuffer.remaining());

        System.out.println("----------------------------------");

        //添加一个数组
        byteBuffer.put("abc".getBytes());
        //获取当前索引所在位置
        System.out.println(byteBuffer.position());
        //获取当前最多能操作到的索引位置
        System.out.println(byteBuffer.limit());
        //获取缓冲区的总长度
        System.out.println(byteBuffer.capacity());
        //获取缓冲区还能操作的空余位置 remaining = limit - position
        System.out.println(byteBuffer.remaining());

        System.out.println("----------------------------------");

        //添加一个数组
        byteBuffer.put("123456".getBytes());
        //获取当前索引所在位置
        System.out.println(byteBuffer.position());
        //获取当前最多能操作到的索引位置
        System.out.println(byteBuffer.limit());
        //获取缓冲区的总长度
        System.out.println(byteBuffer.capacity());
        //获取缓冲区还能操作的空余位置 remaining = limit - position
        System.out.println(byteBuffer.remaining());
        System.out.println(byteBuffer.hasRemaining());

        System.out.println("----------------------------------");

        //如果缓冲区满了，可以调整position指向的位置，就可以重复写，这样会覆盖之前存入索引位置的值
        byteBuffer.position(0);
        byteBuffer.put("123456".getBytes());
        //获取当前索引所在位置
        System.out.println(byteBuffer.position());
        //获取当前最多能操作到的索引位置
        System.out.println(byteBuffer.limit());
        //获取缓冲区的总长度
        System.out.println(byteBuffer.capacity());
        //获取缓冲区还能操作的空余位置 remaining = limit - position
        System.out.println(byteBuffer.remaining());
        System.out.println(byteBuffer.hasRemaining());
    }
}
